import {SexEnum} from "/@/enums";

export enum WebSocketResponseMessageType {
    /** 1.登录返回二维码 */
    LoginQrCode = 1,
    /** 2.用户扫描成功等待授权 */
    WaitingAuthorize,
    /** 3.用户登录成功返回用户信息 */
    LoginSuccess,
    /** 4.收到消息 */
    ReceiveMessage,
    /** 5.上下线推送 */
    OnOffLine,
    /** 6.前端token失效 */
    TokenExpired,
    /** 7.禁用的用户 */
    InValidUser,
    /** 8.点赞、倒赞更新通知 */
    WSMsgMarkItem,
    /** 消息撤回 */
    WSMsgRecall,
    /** 新好友申请 */
    RequestNewFriend,
    /** 新好友会话 */
    NewFriendSession,
}

export enum WebSocketRequestMsgType {
    /** 1.请求登录二维码 */
    RequestLoginQrCode = 1,
    /** 2心跳检测 */
    HeartBeatDetection,
    /** 3用户认证 */
    Authorization,
}

export type WebSocketReqMsgContentType = {
    type: WebSocketRequestMsgType
    data?: Record<string, unknown>
}


export type WebSocketNewMessage = {
    msgId: number,
    fromUid: number,
    roomId:number
}

export type LoginInitResType = { loginUrl: string }

export type LoginSuccessResType = Pick<UserInfoType, 'avatar' | 'name' | 'uid'> & {
    /** 用户的登录凭证，每次请求携带 */
    token: string
}

export type UserInfoType = {
    /** 用户唯一标识 */
    uid: number
    /** 用户头像 */
    avatar: string
    /** 用户名 */
    name: string
    /** 剩余改名次数 */
    modifyNameChance: number
    /** 性别 1为男性，2为女性 */
    sex: SexEnum
    /** 徽章，本地字段，有值用本地，无值用远端 */
    badge?: string
    /** 权限 */
    power?: number
}

// 定义状态的类型 一般情况下Pinia会自动推断出state的类型，你就无需定义接口。如果state的数据类型比较复杂，推荐你定义一个接口来描述state的类型
export interface UserApplyState {
    uid?: string,
    unreadCount?: number,
}

export interface UserOnOffLineState{
    changeList:Array<UserOnOffLineStateItem>,
    onlineNum:number,
}


export interface UserOnOffLineStateItem{
    uid: number,
    lastOptTime:Date,
    activeStatus:number
}



